<?php
/**
 * websocket 即时通讯
 * User: JZ浩
 * Date: 2018/6/5 0031
 * Time: 13:40
 */
namespace webswoole;
require_once 'WebServer.php';

class Server extends WebServer{
    // 监听所有地址
    protected $host = '0.0.0.0';
    //监听 9501 端口
    protected $port = 9505;
    //指定运行模式为多进程
    protected $mode = SWOOLE_PROCESS;
    protected $serverType = 'socket';
    // 指定 socket 的类型为 ipv4 的 tcp socket
    protected $sockType = SWOOLE_SOCK_TCP;
    //配置项
    protected $option = [
        /**
         *  设置启动的worker进程数
         *  业务代码是全异步非阻塞的，这里设置为CPU的1-4倍最合理
         *  业务代码为同步阻塞，需要根据请求响应时间和系统负载来调整
         */
        'worker_num' => 2,
        // 守护进程化
        'daemonize'  => false,
        // 监听队列的长度
        'backlog'    => 128
    ];

    public function __construct(){
        parent::__construct();

        swoole_set_process_name("ceshi_webaocket");

    }

    /**
     * 握手连接
     * @param $server
     * @param $request
     */
    public function onOpen($server, $request){
        var_dump($server);
        echo "server: handshake success with fd{$request->fd}\n";
    }

    /**
     * 定时执行广播推送
     * @param $server
     * @param $workerId
     */
    public function onWorkerStart($server, $workerId){
        var_dump($server);

    }

    /**
     * 发送消息（客户端触发）
     * @param $server
     * @param $frame
     */
    public function onMessage($server, $frame){
        var_dump($server);
        var_dump($frame);
    }

    /**
     * 发送消息（链接触发）
     * @param $server
     * @param $frame
     */
    public function onRequest($server, $frame){

        var_dump($server);
        var_dump($frame);
    }

    /**
     * 退出
     * @param $server
     * @param $fd
     */
    public function onClone($server, $fd){
        echo "client {$fd} closed\n";
    }

}